/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utils;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;

/**
 *
 * @author KAV
 */
public class ResultSetWrap implements Serializable{

    private int pos = -1; // текущая позиция в коллекции строк rows
    private Collection<String> names; // названия полей в таблице
    private Collection<Row> rows;

    public ResultSetWrap(ResultSet rs) throws SQLException {
        LinkedList<String> values = null;
        LinkedList<String> nameses = new LinkedList<String>();
        for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
            nameses.add(rs.getMetaData().getColumnName(i));
        }
        names = nameses;
        LinkedList<Row> rowses = new LinkedList<Row>();
        while (rs.next()) {
            values = new LinkedList<String>();
            for (int i = 1; i <= names.size(); i++) {
                values.add(rs.getString(i));
            }
            rowses.add(new Row(values));
        }
        this.rows = rowses;
    } // здесь выполняется проход по ResultSet и инициализация всех коллекций

    public boolean next() {
        if (pos < rows.size()-1) {
            pos++;
            return true;
        }
        return false;
    } // есть ли следующая строка в таблице  ++pos

    public String getValue(String name) {
        LinkedList<String> namesLL = (LinkedList<String>) names;
        LinkedList<Row> rowsLL = (LinkedList<Row>) rows;
        int i = namesLL.indexOf(name.toUpperCase());
        Row roe = rowsLL.get(pos);
        return rowsLL.get(pos).getValue(namesLL.indexOf(name.toUpperCase()));
    }
}
